﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bibilioteca.DataAccess;
using Bibilioteca.Models;
using System.Data;

namespace Bibilioteca.Dominio
{
    public class NegocioEditoriales
    {

        private EditorialesDao editorialesDao;

        public NegocioEditoriales()
        {
            editorialesDao = new EditorialesDao();
        }

        /*
         * Genera a partir de un dataTable un LinkedList.
         * Esto es simplemente porque desde la vista no se puede iterar
         * sobre un datatable, se necesita una coleccion de editoriales.
         */
        private LinkedList<Editorial> generarListaEditoriales(DataTable tabla)
        {
            LinkedList<Editorial> retorno = new LinkedList<Editorial>();
            foreach (DataRow row in tabla.Rows)
            {
                Editorial s = new Editorial((int)row["editorial_id"], (string)row["editorial_nombre"]);
                retorno.AddLast(s);
            }
            return retorno;
        }

        /*
         * Retorna una lista enlazada de todos los editoriales en la BD.
         */
        public LinkedList<Editorial> todosLosEditoriales()
        {
            return generarListaEditoriales(editorialesDao.todosLosEditoriales());
        }


        /*
         * Retorna la editorial de un material dado.
         */
        public Editorial GetEditorialDeMaterial(string id)
        {
            foreach (Editorial m in generarListaEditoriales(editorialesDao.editorialDeMaterial(id)))
            {
                return m;
            }
            return null;
        }


        /*
         * Dado un numero de editorial lo busca en la BD y lo retorna.
         */
        public Editorial GetEditorialNumero(string id)
        {
            editorialesDao.paramID = Convert.ToInt32(id.Trim());
            DataTable editorialTable = editorialesDao.GetEditorialNumero();
            foreach (DataRow row in editorialTable.Rows)
            {
                Editorial s = new Editorial((int)row["editorial_id"], (string)row["editorial_nombre"]);
                return s;
            }
            return new Editorial(0, "No existe");
        }

        public void modificarEditorial(Editorial editorial)
        {
            editorialesDao.paramID = editorial.Id;
            editorialesDao.nombre = editorial.Nombre;

            if (editorial != null && editorial.Id != 0)
                editorialesDao.modificarEditorial();
        }

        public void insertarEditorial(Editorial editorial)
        {
            editorialesDao.nombre = editorial.Nombre;

            editorialesDao.insertarEditorial();
        }

        public void eliminarEditorial(int id)
        {
            editorialesDao.paramID = id;
            if (id != 0)
                editorialesDao.eliminarEditorial();
        }

    }
}